import lazy { ClassConstructor } from 'class-transformer';

const INTERNAL_PROPERTY = '__supportQuickTransform__'

// 手动标记一个类支持 quick-transformer
// 使用场景:
// class A extends B extends C, A & C 中使用到了 class-transformer, B 没有
// 此时经过 quick-transformer 处理后, A & C 添加了 fromPlain 函数用于数据转换, B 没有
// 同时 A 的 fromPlain 函数中检查了父类是否有 fromPlain 函数, 没有则触发断言(防止父类漏转换场景导致的功能异常)
// B 需要手动添加 SupportQuickTransform 标记自己支持 quick-transformer, 避免 A 的 fromPlain 中触发断言
export function SupportQuickTransform(): Function {
  return (target: Function) => markSupportQuickTransform(target);
}

export function isMarkedSupportQuickTransform<T>(cls: ClassConstructor<T>): boolean {
  return (cls && cls[INTERNAL_PROPERTY]) ?? false;
}

function markSupportQuickTransform(target: Function) {
  target[INTERNAL_PROPERTY] = true;
}
